﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TileNotificationsPack.Attributes;

namespace TileNotificationsPack
{
   // http://msdn.microsoft.com/library/windows/apps/hh761491.aspx
   // http://msdn.microsoft.com/library/windows/apps/windows.ui.notifications.tiletemplatetype

   public class Tile
   {
      public TileBinding Binding { get; set; }
   }

   public class TileImage
   {
      public string Src { get; set; }
      public string Alt { get; set; }
   }

   #region image only tiles

   public class TileImage1 : Tile
   {
      [ImageNode(1)]
      public TileImage Image { get; set; }
   }

   public class TileImage3 : Tile
   {
      [ImageNode(1)]
      public TileImage Image1 { get; set; }

      [ImageNode(3)]
      public TileImage Image2 { get; set; }

      [ImageNode(3)]
      public TileImage Image3 { get; set; }
   }

   public class TileImage5 : TileImage1
   {
      [ImageNode(2)]
      public TileImage Image11 { get; set; }

      [ImageNode(3)]
      public TileImage Image12 { get; set; }

      [ImageNode(4)]
      public TileImage Image21 { get; set; }

      [ImageNode(5)]
      public TileImage Image22 { get; set; }
   }

   public class TileImageRow5 : TileImage1
   {
      [ImageNode(2)]
      public TileImage ImageLeft { get; set; }

      [ImageNode(3)]
      public TileImage ImageLeftCenter { get; set; }

      [ImageNode(4)]
      public TileImage ImageRightCenter { get; set; }

      [ImageNode(5)]
      public TileImage ImageRight { get; set; }
   }

   #endregion

   #region text only tiles

   public class TileText1 : Tile
   {
      [TextNode(1)]
      public string Text { get; set; }
   }

   public class TileText2 : TileText1
   {
      [TextNode(2)]
      public string Text2 { get; set; }
   }

   public class TileText3 : TileText2
   {
      [TextNode(3)]
      public string Text3 { get; set; }
   }

   public class TileText4 : TileText3
   {
      [TextNode(4)]
      public string Text4 { get; set; }
   }

   public class TileText5 : TileText4
   {
      [TextNode(5)]
      public string Text5 { get; set; }
   }

   public class TileText6 : TileText5
   {
      [TextNode(6)]
      public string Text6 { get; set; }
   }

   public class TileText7 : TileText6
   {
      [TextNode(7)]
      public string Text7 { get; set; }
   }

   public class TileText9 : TileText7
   {
      [TextNode(8)]
      public string Text8 { get; set; }

      [TextNode(9)]
      public string Text9 { get; set; }
   }

   public class TileTextRows9 : Tile
   {
      [TextNode(1)]
      public string LargeText { get; set; }

      [TextNode(2)]
      public string Text11 { get; set; }

      [TextNode(3)]
      public string Text12 { get; set; }

      [TextNode(4)]
      public string Text21 { get; set; }

      [TextNode(5)]
      public string Text22 { get; set; }

      [TextNode(6)]
      public string Text31 { get; set; }

      [TextNode(7)]
      public string Text32 { get; set; }

      [TextNode(8)]
      public string Text41 { get; set; }

      [TextNode(9)]
      public string Text42 { get; set; }
   }

   public class TileTextRows10 : Tile
   {
      [TextNode(1)]
      public string Text11 { get; set; }

      [TextNode(2)]
      public string Text12 { get; set; }

      [TextNode(3)]
      public string Text21 { get; set; }

      [TextNode(4)]
      public string Text22 { get; set; }

      [TextNode(5)]
      public string Text31 { get; set; }

      [TextNode(6)]
      public string Text32 { get; set; }

      [TextNode(7)]
      public string Text41 { get; set; }

      [TextNode(8)]
      public string Text42 { get; set; }

      [TextNode(9)]
      public string Text51 { get; set; }

      [TextNode(10)]
      public string Text52 { get; set; }
   }

   public class TileTextRows22 : TileTextRows10
   {
      [TextNode(11)]
      public string Text61 { get; set; }

      [TextNode(12)]
      public string Text62 { get; set; }

      [TextNode(13)]
      public string Text71 { get; set; }

      [TextNode(14)]
      public string Text72 { get; set; }

      [TextNode(15)]
      public string Text81 { get; set; }

      [TextNode(16)]
      public string Text82 { get; set; }

      [TextNode(17)]
      public string Text91 { get; set; }

      [TextNode(18)]
      public string Text92 { get; set; }

      [TextNode(19)]
      public string Text101 { get; set; }

      [TextNode(20)]
      public string Text102 { get; set; }

      [TextNode(21)]
      public string Text111 { get; set; }

      [TextNode(22)]
      public string Text112 { get; set; }
   }

   public class TileTextRows19 : TileTextRows9
   {
      [TextNode(10)]
      public string Text51 { get; set; }

      [TextNode(11)]
      public string Text52 { get; set; }

      [TextNode(12)]
      public string Text61 { get; set; }

      [TextNode(13)]
      public string Text62 { get; set; }

      [TextNode(14)]
      public string Text71 { get; set; }

      [TextNode(15)]
      public string Text72 { get; set; }

      [TextNode(16)]
      public string Text81 { get; set; }

      [TextNode(17)]
      public string Text82 { get; set; }

      [TextNode(18)]
      public string Text91 { get; set; }

      [TextNode(19)]
      public string Text92 { get; set; }
   }

   public class TileText10 : TileText5
   {
      [TextNode(6)]
      public string Text6 { get; set; }

      [TextNode(5)]
      public string Text7 { get; set; }

      [TextNode(8)]
      public string Text8 { get; set; }

      [TextNode(9)]
      public string Text9 { get; set; }

      [TextNode(10)]
      public string Text10 { get; set; }
   }

   public class TileText11 : TileText10
   {
      [TextNode(11)]
      public string Text11 { get; set; }
   }

   public class TileBlockText6 : TileText4
   {
      [TextNode(5)]
      public string BlockText { get; set; }

      [TextNode(6)]
      public string UnderBlockText { get; set; }
   }

   public class TileBlockText3 : TileText1
   {
      [TextNode(2)]
      public string BlockText { get; set; }

      [TextNode(3)]
      public string UnderBlockText { get; set; }
   }

   public class TileBlockText9 : TileText7
   {
      [TextNode(8)]
      public string BlockText { get; set; }

      [TextNode(9)]
      public string UnderBlockText { get; set; }
   }

   #endregion

   #region text and image tiles

   public class TileImage1Text1 : Tile
   {
      [ImageNode(1)]
      public TileImage Image { get; set; }

      [TextNode(1)]
      public string Text { get; set; }
   }

   public class TileImage1Text2 : TileImage1Text1
   {
      [TextNode(2)]
      public string Text2 { get; set; }
   }

   public class TileImage2Text2 : TileImage1Text2
   {
      [ImageNode(2)]
      public TileImage Image2 { get; set; }
   }

   public class TileImage2Text1 : TileImage1Text1
   {
      [ImageNode(2)]
      public TileImage Image2 { get; set; }
   }

   public class TileImage1Text3 : TileImage1Text2
   {
      [TextNode(3)]
      public string Text3 { get; set; }
   }

   public class TileImage1Text4 : TileImage1Text3
   {
      [TextNode(4)]
      public string Text4 { get; set; }
   }

   public class TileImage1Text5 : TileImage1Text4
   {
      [TextNode(5)]
      public string Text5 { get; set; }
   }

   public class TileImage1Text7 : TileImage1Text5
   {
      [TextNode(6)]
      public string Text6 { get; set; }

      [TextNode(7)]
      public string Text7 { get; set; }
   }

   public class TileImageRow5Text1 : TileImageRow5
   {
      [TextNode(1)]
      public string Text { get; set; }
   }

   public class TileImageRow5Text2 : TileImageRow5Text1
   {
      [TextNode(2)]
      public string Text2 { get; set; }
   }

   public class TileImage5Text1 : TileImage1Text1
   {
      [ImageNode(2)]
      public TileImage Image11 { get; set; }

      [ImageNode(3)]
      public TileImage Image12 { get; set; }

      [ImageNode(4)]
      public TileImage Image21 { get; set; }

      [ImageNode(5)]
      public TileImage Image22 { get; set; }
   }

   public class TileImage5Text2 : TileImage5Text1
   {
      [TextNode(2)]
      public string Text2 { get; set; }
   }

   public class TileImage6Text1 : TileImage5Text1
   {
      [ImageNode(6)]
      public string ImageWithText { get; set; }
   }

   public class TileImage6Text2 : TileImage6Text1
   {
      [TextNode(2)]
      public string Text2 { get; set; }
   }

   public class TileImage5Text5 : TileImage5Text2
   {
      [TextNode(4)]
      public string Text4 { get; set; }

      [TextNode(5)]
      public string Text5 { get; set; }
   }

   public class TileImage3Text3List : TileImage3
   {
      [TextNode(1)]
      public string Text1 { get; set; }

      [TextNode(2)]
      public string Text2 { get; set; }

      [TextNode(3)]
      public string Text3 { get; set; }
   }

   public class TileImage3Text6List : TileImage3
   {
      [TextNode(1)]
      public string TextLarge1 { get; set; }

      [TextNode(2)]
      public string TextSmall1 { get; set; }

      [TextNode(3)]
      public string TextLarge2 { get; set; }

      [TextNode(4)]
      public string TextSmall2 { get; set; }

      [TextNode(5)]
      public string TextLarge3 { get; set; }

      [TextNode(6)]
      public string TextSmall3 { get; set; }
   }

   public class TileImage3Text7List : TileImage3
   {
      [TextNode(1)]
      public string TextHeader { get; set; }

      [TextNode(2)]
      public string Text11 { get; set; }

      [TextNode(3)]
      public string Text12 { get; set; }

      [TextNode(4)]
      public string Text21 { get; set; }

      [TextNode(5)]
      public string Text22 { get; set; }

      [TextNode(6)]
      public string Text31 { get; set; }

      [TextNode(7)]
      public string Text33 { get; set; }
   }

   public class TileImage3Text9List : TileImage3
   {
      [TextNode(1)]
      public string TextLarge1 { get; set; }

      [TextNode(2)]
      public string TextSmall1 { get; set; }

      [TextNode(3)]
      public string TextSmall1_2 { get; set; }

      [TextNode(4)]
      public string TextLarge2 { get; set; }

      [TextNode(5)]
      public string TextSmall2 { get; set; }

      [TextNode(6)]
      public string TextSmall2_2 { get; set; }

      [TextNode(7)]
      public string TextLarge3 { get; set; }

      [TextNode(8)]
      public string TextSmall3 { get; set; }

      [TextNode(9)]
      public string TextSmall3_3 { get; set; }
   }

   #endregion
}
